home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 051-060 / amok56 / m2maker / txt / m2maker.mod < prev    next >
Text File  |  1993-11-04  |  10KB  |  307 lines

  1. (*---------------------------------------------------------------------------
  2.   :Program.    m2Maker
  3.   :Author.     Thomas Stolze
  4.   :Address.    Goslarsche Str. 32, 3000 Hannover 21, Germany
  5.   :Phone.      (0)511 / 75 10 77
  6.   :Version.    V2.0
  7.   :Date.       10-Nov-90
  8.   :Copyright.  Shareware
  9.   :Language.   Modula-2
  10.   :Translator. M2Amiga V3.32d
  11.   :Contents.   Programming Utility.
  12.   :Remark.     Supports the M2Amiga System (C) by A+L AG Switzerland
  13. ---------------------------------------------------------------------------*)
  14.  
  15. MODULE m2Maker;
  16.  
  17. FROM Arts            IMPORT Assert,wbStarted;
  18. FROM DosL            IMPORT Delay;
  19. FROM ExecD           IMPORT MemReqs,MemReqSet,Message,MsgPortPtr;
  20. FROM ExecL           IMPORT AllocMem,CopyMem,CopyMemQuick,FindPort,Forbid,
  21.                             FreeMem,GetMsg,Permit,PutMsg,ReplyMsg,WaitPort;
  22. FROM FileRequester   IMPORT CauseAction,FileRequestFlags,FileRequestFlagSet,
  23.                             LoadDir;
  24. FROM GraphicsD       IMPORT DisplayFlags,DisplayFlagSet,DrawModeSet,GfxBasePtr,
  25.                             jam1,jam2,RastPortPtr;
  26. FROM GraphicsL       IMPORT AllocRaster,BltClear,FreeRaster,InitBitMap,
  27.                             SetBPen,SetDrMd,Text;
  28. FROM InitIntuition   IMPORT prgPtr,PrintStatus;
  29. FROM InputEvent      IMPORT Qualifiers,QualifierSet;
  30. FROM InputHandler    IMPORT Guard;
  31. FROM InstallOptions  IMPORT ResidentEditor,
  32.                 ResidentLinker,ResidentCompiler,InstallDebug,
  33.                 InstallPool,InstallM2Ohm;
  34. FROM IntuiMacros     IMPORT ItemNum,MenuNum,SubNum;
  35. FROM IntuitionD      IMPORT GadgetFlags,
  36.                             GadgetFlagSet,GadgetPtr,IDCMPFlags,IDCMPFlagSet,
  37.                             Image,IntuiMessage,IntuiMessagePtr,IntuiText,
  38.                             IntuiTextPtr,IntuitionBasePtr,Menu,MenuItemFlags,
  39.                             MenuItemFlagSet,NewWindow,
  40.                             ScreenFlags,
  41.                             ScreenFlagSet,strGadget,
  42.                             StringInfo,WindowFlags,WindowFlagSet,
  43.                             WindowPtr;
  44. FROM IntuitionL      IMPORT ActivateWindow,DisplayBeep,
  45.                             MoveWindow,ModifyIDCMP,
  46.                             OpenWindow,RefreshGadgets,RefreshGList,
  47.                             SetMenuStrip,SizeWindow,
  48.                             WBenchToFront,BeginRefresh,EndRefresh;
  49. FROM LSOptions       IMPORT LoadOptions,parameterFile,SaveOptions;
  50. FROM Project         IMPORT DeleteProject,LoadProject,SaveProject,
  51.                             TouchProject;
  52. FROM RequesterWindow IMPORT InfoRequester,OptionRequester,HelpRequester;
  53. FROM Routines        IMPORT CompileProject,Compiler,DeleteAFile,
  54.                             EditMakeFile,Editor,FastLister,
  55.                             Linker,Make,MakePath,New,NewShell,Print,
  56.                             Project,RenameAFile,Run,Save,SmallWindow,
  57.                             StartModuleTool,SwitchGadget,TestForFile,
  58.                             ExecuteStr,KeyMaker,BonusTrack,ByeByeFastLister,
  59.                             ByeByeCompiler,ByeByeDebug,ByeByePool,
  60.                             InteractiveCompiler;
  61. FROM SYSTEM          IMPORT ADDRESS,ADR,CAST,LONGSET;
  62. FROM String          IMPORT Copy,LastPos,Length;
  63. FROM TimerSupport    IMPORT PrintHeadLine;
  64.  
  65. (*FROM InOut IMPORT WriteInt,WriteLn;*)
  66.  
  67. CONST  F1 = 50H;   F6 = 55H;
  68.        F2 = 51H;   F7 = 56H;
  69.        F3 = 52H;   F8 = 57H;
  70.        F4 = 53H;   F9 = 58H;
  71.        F5 = 54H;  F10 = 59H;
  72.  
  73.        space = 40H; C = 33H; Q = 10H; P = 19H; L = 28H; HELP = 5FH;
  74.  
  75. VAR msg           : IntuiMessage;
  76.     changeProject : BOOLEAN;
  77.  
  78. PROCEDURE GetFRInfos(ptr : ADDRESS; mask : LONGCARD): LONGINT;
  79. VAR pos : INTEGER;
  80. BEGIN
  81.   IF mask = CAST(CARDINAL,FileRequestFlagSet{giveFileSelected}) THEN
  82.      Copy(prgPtr^.BufferString[0],prgPtr^.FR.file);
  83.      pos:=LastPos(prgPtr^.BufferString[0],Length(prgPtr^.BufferString[0]),".");
  84.      IF pos # -1 THEN prgPtr^.BufferString[0,pos]:=00C; END;
  85.      RefreshGList(ADR(prgPtr^.GadgetArray[0]),prgPtr^.window,NIL,1);
  86.   ELSIF mask = CAST(CARDINAL,FileRequestFlagSet{giveDirSelected}) THEN
  87.      IF (lShift IN msg.qualifier) OR (rShift IN msg.qualifier) THEN
  88.         Copy(prgPtr^.BufferString[3],prgPtr^.FR.dirPath);
  89.         RefreshGList(ADR(prgPtr^.GadgetArray[3]),prgPtr^.window,NIL,1);
  90.         changeProject:=TRUE;
  91.      END;
  92.   END;
  93.   RETURN 0;
  94. END GetFRInfos;
  95.  
  96. PROCEDURE ChangeProject(change : BOOLEAN);
  97. VAR file,
  98.     memo : ARRAY [0..255] OF CHAR;
  99. BEGIN
  100.   IF changeProject THEN
  101.      changeProject:=FALSE;
  102.      IF change THEN
  103.         Copy(memo,prgPtr^.FR.dirPath);
  104.         MakePath(prgPtr^.FR.dirPath,"m2Maker.cfg",file);
  105.         LoadOptions(file); Copy(prgPtr^.FR.dirPath,memo);
  106.         Copy(prgPtr^.BufferString[3],memo);
  107.         RefreshGList(ADR(prgPtr^.GadgetArray[3]),prgPtr^.window,NIL,1);
  108.         SaveOptions(file);
  109.      ELSE
  110.         MakePath(prgPtr^.BufferString[3],"m2Maker.cfg",file);
  111.         LoadOptions(file);
  112.      END;
  113.      Project(TRUE);
  114.      IF change THEN
  115.         MakePath(prgPtr^.FR.dirPath,"txt",file);
  116.         IF TestForFile(ADR(file)) THEN
  117.            Copy(prgPtr^.FR.dirPath,file);
  118.         END;
  119.      END;
  120.      LoadDir(ADR(prgPtr^.FR)); SaveOptions(parameterFile);
  121.      PrintStatus("Changed Project !");
  122.   END;
  123. END ChangeProject;
  124.  
  125. PROCEDURE Startup;
  126. VAR idcmp : IDCMPFlagSet;
  127. BEGIN
  128.   idcmp:=prgPtr^.window^.idcmpFlags;
  129.   ModifyIDCMP(prgPtr^.window,IDCMPFlagSet{});
  130.   LoadOptions(parameterFile); changeProject:=FALSE;
  131.   IF Length(prgPtr^.BufferString[3]) > 0 THEN
  132.      IF NOT TestForFile(ADR(prgPtr^.BufferString[3])) THEN
  133.         LoadProject; LoadDir(ADR(prgPtr^.FR));
  134.      END;
  135.   END;
  136.   Project(TRUE); Guard;
  137.   ModifyIDCMP(prgPtr^.window,idcmp);
  138. END Startup;
  139.  
  140. PROCEDURE SaveAllOptions;
  141. VAR dummy : ARRAY [0..150] OF CHAR;
  142. BEGIN
  143.   SaveOptions(parameterFile);
  144.   IF (selected IN prgPtr^.GadgetArray[16].flags) THEN
  145.      MakePath(prgPtr^.BufferString[3],"m2Maker.cfg",dummy);
  146.      SaveOptions(dummy);
  147.   END;
  148. END SaveAllOptions;
  149.  
  150. PROCEDURE NewFile;
  151. VAR pos : INTEGER;
  152. BEGIN
  153.   Copy(prgPtr^.FR.file,prgPtr^.BufferString[0]);
  154.     pos:=LastPos(prgPtr^.BufferString[0],Length(prgPtr^.BufferString[0]),".");
  155.     IF pos # -1 THEN prgPtr^.BufferString[0,pos]:=00C; END;
  156.   RefreshGList(ADR(prgPtr^.FR.datas^.GadgetArray[4]),prgPtr^.window,NIL,1);
  157.   RefreshGList(ADR(prgPtr^.GadgetArray[0]),prgPtr^.window,NIL,1);
  158. END NewFile;
  159.  
  160. PROCEDURE HandleProgram;
  161. VAR msgPtr : IntuiMessagePtr;
  162.     gPtr   : GadgetPtr;
  163.     bool,
  164.     exit   : BOOLEAN;
  165. BEGIN
  166.  
  167.   LOOP
  168.     WaitPort(prgPtr^.window^.userPort);
  169.       msgPtr:=GetMsg(prgPtr^.window^.userPort); msg:=msgPtr^;
  170.     ReplyMsg(msgPtr);
  171.     gPtr:=msg.iAddress;
  172.  
  173.     IF (closeWindow IN msg.class) THEN
  174.        EXIT;
  175.     ELSIF (gadgetUp IN msg.class) THEN
  176.       CASE gPtr^.gadgetID OF
  177.         22 : SmallWindow;
  178.       | 10 : NewFile;
  179.       ELSE
  180.       END;
  181.     ELSIF (gadgetDown IN msg.class) THEN
  182.       CASE gPtr^.gadgetID OF
  183.          0 : Editor;
  184.       |  1 : bool:=Compiler(TRUE);
  185.       |  2 : bool:=Linker(TRUE);
  186.       |  3 : Run;
  187.       |  4 : Make(TRUE);
  188.       |  5 : ByeByeDebug;
  189.       |  6 : OptionRequester;
  190.       |  7 : LoadOptions(parameterFile);
  191.       |  8 : SaveAllOptions;
  192.       |  9 : Save;
  193.       | 13 : Print;
  194.       | 15 : Project(TRUE);
  195.       | 17 : DeleteAFile;
  196.       | 18 : New;
  197.       | 19 : StartModuleTool;
  198.       | 20 : KeyMaker;
  199.       | 21 : RenameAFile;
  200.       ELSE
  201.       END;
  202.     ELSIF (menuPick IN msg.class) THEN
  203.        CASE MenuNum(msg.code) OF
  204.          0: CASE ItemNum(msg.code) OF
  205.               0: InfoRequester;
  206.             | 1: FastLister;
  207.             | 2: NewShell;
  208.             | 3: EXIT;
  209.             ELSE
  210.             END;
  211.        | 1: CASE ItemNum(msg.code) OF
  212.               0: Editor;
  213.             | 1: bool:=Compiler(TRUE);
  214.             | 2: bool:=Linker(TRUE);
  215.             | 3: Run;
  216.             | 4: Make(TRUE);
  217.             | 5: KeyMaker;
  218.             | 6: ByeByeDebug;
  219.             | 7: BonusTrack(prgPtr^.BufferString[14]);
  220.             | 8: BonusTrack(prgPtr^.BufferString[15]);
  221.             | 9: TouchProject;
  222.             |10: CASE SubNum(msg.code) OF
  223.                    0 : EditMakeFile;
  224.                  | 1 : CompileProject("",TRUE);
  225.                  | 2 : CompileProject(prgPtr^.FR.file,FALSE);
  226.                  ELSE
  227.                  END;
  228.             ELSE
  229.             END;
  230.        | 2: CASE ItemNum(msg.code) OF
  231.               2: InteractiveCompiler;
  232.             | 3: ResidentCompiler;
  233.             | 4: ResidentLinker;
  234.             | 5: ResidentEditor;
  235.             | 6: InstallPool;
  236.             | 7: InstallDebug;
  237.             | 8: InstallM2Ohm;
  238.             ELSE
  239.             END;
  240.        | 3: CASE ItemNum(msg.code) OF
  241.               0: CASE SubNum(msg.code) OF
  242.                    0 : SaveProject(FALSE);
  243.                  | 1 : SaveProject(TRUE);
  244.                  ELSE
  245.                  END;
  246.             | 1: LoadProject; changeProject:=TRUE; ChangeProject(FALSE);
  247.             | 2: DeleteProject;
  248.             ELSE
  249.             END;
  250.        ELSE
  251.        END;
  252.     ELSIF (rawKey IN msg.class) THEN
  253.        bool:=TRUE;
  254.        IF (control IN msg.qualifier) AND (lShift IN msg.qualifier) THEN
  255.           CASE msg.code OF
  256.             192,208..218 : DEC(msg.code,128); bool:=FALSE;
  257.           ELSE
  258.           END;
  259.        END;
  260.  
  261.        CASE msg.code OF
  262.          F1 : Editor;
  263.        | F2 : bool:=Compiler(bool);
  264.        | F3 : bool:=Linker(bool);
  265.        | F4 : Run;
  266.        | F5 : Make(bool);
  267.        | F6 : KeyMaker;
  268.        | F7 : ByeByeDebug;
  269.        | F8 : StartModuleTool;
  270.        | F9 : Print;
  271.        | F10: LoadDir(ADR(prgPtr^.FR));
  272.        | space: bool:=WBenchToFront(); ActivateWindow(prgPtr^.window);
  273.        | HELP:  HelpRequester;
  274.        ELSE
  275.           IF (control IN msg.qualifier) THEN
  276.              CASE msg.code OF
  277.                C : NewShell;
  278.              | Q : EXIT;
  279.              | P : Project(FALSE); msg.code:=0;
  280.              | L : LoadDir(ADR(prgPtr^.FR));
  281.              ELSE
  282.                IF (lShift IN msg.qualifier) THEN
  283.                   IF msg.code = 0 THEN PrintHeadLine; END;
  284.                END;
  285.              END;
  286.           END;
  287.        END;
  288.     ELSIF (refreshWindow IN msg.class) THEN
  289.       BeginRefresh(prgPtr^.window);
  290.         Delay(5);
  291.       EndRefresh(prgPtr^.window,bool);
  292.     END;
  293.  
  294.     Forbid(); bool:=CauseAction(ADR(prgPtr^.FR),ADR(msg),exit); Permit();
  295.     ChangeProject(TRUE);
  296.   END;
  297.  
  298. END HandleProgram;
  299.  
  300. BEGIN
  301.   prgPtr^.FR.func:=GetFRInfos; Startup;
  302.  
  303.   HandleProgram;
  304.  
  305. END m2Maker.
  306.  
  307.